less-32

閉合測試:

可以發現id後面的數字不管用什麼符號,都會被轉譯,在前面多一個反斜線。不過:

可以從上圖原始碼的第40行發現它是用GBK編碼。mysql數據庫在使用寬字節(GBK)編碼時,會認為兩個字符是一個漢字(前一個ascii碼要大於128(比如%df),才到漢字的範圍),而且當我們輸入單引號時,mysql會調用轉義函數,將單引號變為’,其中的十六進制是%5c,mysql的GBK編碼,會認為%df%5c是一個寬字節,也就是’運’,從而使單引號閉合(逃逸),進行注入攻擊。以下是轉譯過程:

%df%27===>(addslashes)====>%df%5c%27====>(GBK)====>運’

用户输入==>过滤函数==>代码层的$sql==>mysql处理请求==>mysql中的sql

加上%df後再來測測看閉合:

可以發現會出現錯誤,代表可以注入。而這一題是用單引號閉合(從上圖反藍應該可見一斑),可以實際試試看回顯位置:

其他的注入語句就跟less-1一樣,取代上圖反藍即可。但要注意不可用到單引號,所以一些慣用查詢語句要改一下,如果需要用單引號把資料庫或table或column的名字括起來,就改用16進位。

改成16進位方式如下圖,先把想改成16進位的東西反藍,再點下圖encoding,會出現下拉式選單:

接下來選Hexadecimal encode:

可以發現轉成16進位如下圖,記得要拿掉單引號,並在前面加0x:

成果如下:

上圖反藍處可替換成查詢語句如下:

#顯示目前DB
union select null,null,database()

#顯示security DB底下的table:
union select null,null,group_concat(TABLE_NAME) from information_schema.tables where TABLE_SCHEMA = database()


#顯示security DB底下的users table的column名稱:
union select null,null,group_concat(COLUMN_NAME) FROM information_schema.columns WHERE TABLE_SCHEMA = database() AND TABLE_NAME = 0x7573657273


#顯示users table的password這個column的內容
union select null,group_concat(username),group_concat(password) FROM users

less-33

閉合測試

根據上圖,一樣是單引號閉合。

之後的查詢語句跟less-32完全一樣,但記得id=1要改成id=0,查詢語句要放在下圖反藍處:

less-35

雖然看上面的錯誤好像很複雜,但其實這一題是數值型注入,如下圖:

所以也不用考慮轉譯的問題,只要把下圖反藍給換成less-32最後面提到的查詢語句即可。

less-36

一樣會有轉譯如下圖:

可以發現即使加了%df,前面還是會被多append一個反斜線(5c):

less-34

輸入admin/admin之後的畫面:

同樣的,如果輸入單引號如下圖藍字,會發現一樣會多個反斜線如下圖反灰:

由於一些注入用hackbar會失敗,所以接下來用burp。

用一樣的思路,寬字節注入,帳號輸入admin%df' union select 1,2#

從上圖可以發現,%會被轉譯成%25,所以要把那25給拿掉。把上圖burp的request送到repeater後改一下:

可以發現拿掉25後(如上圖反藍)再送以後,就可以看到回顯點。

之後只要把上圖反藍處取代成查詢語句即可。如果想用less-32的也可以,但是要改一下,要刪掉一個null,。因為這一次只有兩欄。

less-37

做不出來


#sql injection: 注入字符被轉譯之解決方式(寬字符注入)







Related Posts

Secure Apache Using Certbot with Let's Encrypt on Ubuntu 20.04

Secure Apache Using Certbot with Let's Encrypt on Ubuntu 20.04

SQL 筆記

SQL 筆記

【Day02】 OM2M框架佈署與介紹

【Day02】 OM2M框架佈署與介紹


Comments